package com.neusoft.javafxdemo2.controller;

import com.neusoft.javafxdemo2.common.AlertUtils;
import com.neusoft.javafxdemo2.common.FileUtils;
import com.neusoft.javafxdemo2.entity.Aqi;
import com.neusoft.javafxdemo2.entity.AqiFeedback;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.text.Text;

import java.time.LocalDate;
import java.util.*;

public class SupervisorAddAQIViewController {
    @FXML
    private TableView tableView;
    @FXML
    private TextField txtAddress;
    @FXML
    private TextArea txtAreaInformation;

    @FXML
    private TableColumn<Aqi,String> colLevel,colExplain,colImpact;
    //声明一个list，将这个list和tableView绑定
    private ObservableList<Aqi> aqiList = FXCollections.observableArrayList();
    @FXML
    private ComboBox<String> comBoxProvince,comboBoxCity,comboBoxEstimateGender;
    private Map<String, List<String>> provinceMap = new HashMap();
    //在界面初始化的时候，向表格中添加数据
    @FXML
    public void initialize(){
        //将aqiList和tableView绑定
        tableView.setItems(aqiList);
        //将表格中的列和aqi对象中的属性绑定
        colLevel.setCellValueFactory(new PropertyValueFactory<>("level"));
        colExplain.setCellValueFactory(new PropertyValueFactory<>("explain"));
        colImpact.setCellValueFactory(new PropertyValueFactory<>("impact"));
        //查询AQI数据，将查询的所有AQI对象添加到aqiList中，这样数据就会显示到和aqiList绑定的tableView中了。
        Map<String,Aqi> aqiMap = FileUtils.readObject("aqi.txt");
        //将aqiMap中的对象值，读取到aqiList中
        aqiList.addAll(aqiMap.values());

        //初始化下拉列表数据
        provinceMap.put("内蒙古省",List.of("呼伦贝尔市","赤峰市","呼和浩特市"));
        provinceMap.put("辽宁省", List.of("沈阳市","大连市","鞍山市"));
        provinceMap.put("吉林省",List.of("长春市","吉林市"));
        //把map中的所有key集合取出放入到省份的下拉列表中
        comBoxProvince.setItems(FXCollections.observableArrayList(provinceMap.keySet()));
        //点击省份下拉列表时候，联动城市的下拉类别,监听下拉列表项选择事件
        comBoxProvince.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
            @Override
            public void changed(ObservableValue<? extends String> observableValue, String oldValue, String newValue) {
                //根据所选择的新的省份，从map中，把这个省份对应的城市列表获取出来
                List<String> cityList = provinceMap.get(newValue);
                //把获取的城市列表绑定到coBoxCity
                comboBoxCity.setItems(FXCollections.observableArrayList(cityList));
            }
        });
        //初始化预估等级下拉列表
        comboBoxEstimateGender.setItems(FXCollections.observableArrayList(List.of("一级","二级","三级")));
    }

    public void saveAqiFeedback(){
        //存反馈信息的时候，需要先从文件读取以后得数据map
        Map<String,List<AqiFeedback>> aqiFeedbackMap = FileUtils.readObject("AqiFeedback.txt");
        //Map结构：让telId作为key,value：list放入多个AqiFeedback对象
        String telId = SupervisorLoginViewController.currentLoginSupervisor.getTelId();//登录的公众监督员的手机号
        List<AqiFeedback> aqiFeedbackList = aqiFeedbackMap.get(telId);
        if(aqiFeedbackList == null){ //第一次添加，需要初始化List对象
            aqiFeedbackList = new ArrayList<>();
        }

        String afId = String.valueOf(aqiFeedbackList.size()+1);
        String provinceName = comBoxProvince.getValue();
        String cityName = comboBoxCity.getValue();
        String address = txtAddress.getText();
        String information = txtAreaInformation.getText();
        String estimateGrade = comboBoxEstimateGender.getValue();
        String date = LocalDate.now().toString();
        AqiFeedback aqiFeedback = new AqiFeedback(afId,telId,provinceName,cityName,address,estimateGrade,date,information);

        aqiFeedbackList.add(aqiFeedback);
        aqiFeedbackMap.put(telId,aqiFeedbackList);
        FileUtils.writeObject("AqiFeedback.txt",aqiFeedbackMap);
        AlertUtils.showDialog("AQI反馈","信息反馈成功");
    }
}